/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pr3.funcion;

import pr3.cromosoma.Estado;

/**
 * PseudoFuncion usada como raiz en los cromosomas para simplificar las mutaciones
 * @author Gonzalo Ortiz Jaureguizar (gortiz at software.imdea.org)
 */
public class NOP extends Funcion {
    
    private Funcion argumento;
    
    public NOP() {
    }

    public NOP(Funcion argumento) {
        this.argumento = argumento;
    }

    public Funcion getArgumento() {
        return argumento;
    }

    public void setArgumento(Funcion argumento) {
        this.argumento = argumento;
    }
    
    @Override
    public Boolean evaluar(Estado estado) {
        Object valor = argumento.evaluar(estado);
        if(valor == null || valor instanceof Boolean && !((Boolean)valor)) {
            return false;
        }
        return true;
    }

    @Override
    public int getAridad() {
        return 1;
    }

    @Override
    public void setArgumento(int i, Funcion arg) {
        if(i != 0)
            throw new IllegalArgumentException("Not supported.");
        setArgumento(arg);
    }

    @Override
    public Funcion getArgumento(int i) {
        if(i != 0)
            throw new IllegalArgumentException("Not supported.");
        return getArgumento();
    }

    @Override
    public Funcion clone() {
        NOP clon = new NOP(argumento.clone());
        clon.argumento.setPadre(clon);
        return clon;
    }

    @Override
    public String toString(int profundidad) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < profundidad; i++) {
            sb.append("  ");
        }
        sb.append("NOP");
        sb.append('\n');
        sb.append(argumento.toString(profundidad + 1));
        return sb.toString();
    }
    
    public String toString() {
        return toString(0);
    }
    
}
